//  三步开启一个服务器
const http = require('http');
const fs = require('fs');
const path = require('path');

let server = http.createServer((req, res) => {

    // 处理:http://127.0.0.1:3001/addHeroSkin  post请求
    // 请求体参数格式：cname=后羿&skin_name=test
    // 1.0 请求方法和请求路径判断
    let { url, method } = req;
    if (url === '/addHeroSkin' && method === 'POST') {
        // 2.0 通过data和end两个事件获取到请求体数据
        let bodyString = '';
        req.on('data', (chunk) => {
            bodyString += chunk.toString(); // 将分片数据追加到bodyString中
        })

        // 在end事件中保证能够接收完整的请求体参数
        req.on('end', () => {
            // 此处可以放心的使用bodyString，因为它已经是一个完整的数据了
            // 3.0 将数据写入到data.json中
            let searchParms = new URLSearchParams(bodyString);
            // 构造出需要写入的对象格式
            let heroObj = {
                "cname": searchParms.get('cname'),
                "skin_name": searchParms.get('skin_name')
            }
            // 读取data.json中的老数据
            let datajson = fs.readFileSync(path.join(__dirname, 'data.json'));
            let dataArr = JSON.parse(datajson);
            // 将新数据追加到dataArr数组中，注意：此次操作的是变量，没有进入到data.json中去
            dataArr.push(heroObj);
            // 将dataArr 数组通过转换成json字符串后写入到data.json文件中
            fs.writeFileSync(path.join(__dirname, 'data.json'), JSON.stringify(dataArr));

            // 4.0 将保存成功与否响应回客户端
            let resObj = {
                "code": 200,
                "msg": "添加成功"
            };
            res.end(JSON.stringify(resObj));
        })
    }

})

server.listen(3001, () => {
    console.log('3001服务器启动');
})